
#include "delay.h"

/* 微秒级延时 */
void delay_us(uint32_t xus)
{
    SysTick->CTRL |= (1 << 2);                              // 选择系统时钟为168MHz(默认是21MHz)
    SysTick->LOAD = 168 * xus - 1;                          // 设置重装载值
    SysTick->VAL = 0;                                       // 清除当前值寄存器
    SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;               // 使能系统嘀嗒定时器
    while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk));  // 等待计数器溢出
    SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;              // 失能系统嘀嗒定时器
}

/* 毫秒级延时 */
void delay_ms(uint32_t xms)
{
    while (xms--)
    {
        delay_us(1000);
    }
}

/* 秒级延时 */
void delay_s(uint32_t xs)
{
    while (xs--)
    {
        delay_ms(1000);
    }
}
